﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.Json.Serialization;

namespace Sirius.Entity
{
    /// <summary>
    /// 消息按钮对象
    /// </summary>
    public class InlineKeyboard
    {
        //数组的一项代表消息按钮组件的一行,最多含有 5 行
        [JsonPropertyName("rows")]
        public InlineKeyboardRow[] rows { get; set; }
    }
    /// <summary>
    /// 消息按钮组件行对象数组
    /// </summary>
    public class InlineKeyboardRow
    {
        //数组的一项代表一个按钮，每个 InlineKeyboardRow 最多含有 5 个 Button
        [JsonPropertyName("buttons")]
        public Button[] buttons { get; set; }
    }

    /// <summary>
    /// 按钮对象数组
    /// </summary>
    public class Button
    {
        //按钮ID
        [JsonPropertyName("id")]
        public string Id { get; set; }
        //用于设定按钮的显示效果
        [JsonPropertyName("render_data")]
        public RenderData render_data { get; set; }

        //用户设定按钮点击后的操作
        [JsonPropertyName("action")]
        public Action action { get; set; }
    }

    /// <summary>
    /// 按纽渲染展示对象
    /// </summary>
    public class RenderData
    {
        //按钮上的文字
        [JsonPropertyName("label")]
        public string label { get; set; }

        //点击后按钮上的文字
        [JsonPropertyName("visited_label")]
        public string visited_label { get; set; }

        //按钮样式，参考 RenderStyle
        [JsonPropertyName("style")]
        public int style { get; set; }
    }
    
    /// <summary>
    /// 按钮边框样式
    /// </summary>  
    public enum RenderStyle
    {
        gray_border=0,
        blue_border=1
    }   

    /// <summary>
    /// 按纽操作相关字段
    /// </summary>
    public class Action
    {

        //操作类型，参考 ActionType
        [JsonPropertyName("type")]
        // --------------------ActionType----------------
        //0	http 或 小程序 客户端识别 schem, data字段为链接
        //1	回调后台接口, data 传给后台
        //2	at机器人, 根据 at_bot_show_channel_list 决定在当前频道或用户选择频道,自动在输入框 @bot data
        // --------------------ActionType----------------
        public int type { get; set; }

        //用于设定操作按钮所需的权限
        [JsonPropertyName("permission")]
        public Permission permission { get; set; }
        [JsonPropertyName("click_limit")]

        ////可点击的次数, 默认不限
        public int click_limit { get; set; }

        //操作相关数据
        [JsonPropertyName("data")]
        public string data { get; set; }

        //false:不弹出子频道选择器 true:弹出子频道选择器
        [JsonPropertyName("at_bot_show_channel_list")]
        public bool at_bot_show_channel_list { get; set; }
    }



    public class Permission
    {

        //权限类型，参考PermissionType
        [JsonPropertyName("type")]
        public int type { get; set; }

        //有权限的身份组id的列表
        [JsonPropertyName("specify_role_ids")]
        public string[] specify_role_ids { get; set; }

        //有权限的用户id的列表
        [JsonPropertyName("specify_user_ids")]
        public string[] specify_user_ids { get; set; }
        // --------------------PermissionType----------------
        //0	指定用户可操作
        //1	仅管理者可操作
        //2	所有人可操作
        //3	指定身份组可操作
        // --------------------PermissionType----------------
    }
}
